package com.xh.load.util;

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

/**
 * Thumb图片上传处理工具类
 * @author DWQin
 *
 */
public class ThumbUtil {
	
	enum ImageType {

		JPG, JPEG, PNG, GIF;

		public static boolean isImage(String imageType) {
			if (imageType == null) {
				return false;
			}
			for (ImageType type : ImageType.values()) {
				if (type.toString().equals(imageType.toUpperCase())) {
					return true;
				}
			}
			return false;
		}
	}

	/**
	 * 批量把sourceDir目录及子目录里的图片压缩 输出目录为destDir,原子目录也随之创建
	 * 
	 * @param sourceDir
	 * @param destDir
	 */
	public static void batchConvert(String sourceDir, String destDir) throws IOException {
		batchConvert(sourceDir, destDir, sourceDir);
	}

	private static void batchConvert(String sourceDir, String destDir, String filePathString) throws IOException {
		File filePath = new File(filePathString);
		if (filePath.isDirectory()) {
			for (File it : filePath.listFiles()) {
				batchConvert(sourceDir, destDir, it.getAbsolutePath());
			}
		} else {
			String absolutePath = filePath.getAbsolutePath();
			String relativePath = absolutePath.substring(sourceDir.length(), absolutePath.length());
			convert(filePath.getAbsolutePath(), destDir + relativePath);
		}
	}

	/**
	 * 把source路径的图片压缩，输出到dest路径
	 * 
	 * @param source
	 *            原图片路径
	 * @param dest
	 *            压缩后保存的图片路径
	 * @throws IOException
	 */
	public static void convert(String source, String dest) throws IOException {

		File outPathDir = new File(getDirectoryPath(dest));
		if (!outPathDir.exists()) {
			outPathDir.mkdirs();
		}

		// -----------------------------------------------
		// 只对符合自定义图片扩展名的文件进行处理
		// -----------------------------------------------
		if (ImageType.isImage(getFileExt(source))) {
			Thumbnails.of(source).scale(1f).toFile(dest);
		}
		System.out.println("---------------------------");
		System.out.println("source: " + source);
		System.out.println("dest: " + dest);
		System.out.println("---------------------------");

	}

	/**
	 * 返回文件的扩展名
	 * 
	 * @param filePath
	 * @return
	 */
	public static String getFileExt(String filePath) {
		if (filePath != null && !"".equals(filePath)) {
			return filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length());
		}
		return null;
	}

	/**
	 * 返回文件(非文件夹)filePath的绝对目录路径
	 * 
	 * @param filePath
	 *            输入的文件夹
	 * @return
	 */
	public static String getDirectoryPath(String filePath) {
		return filePath.substring(0, filePath.lastIndexOf(File.separator));
	}

	public static void main(String[] args) throws IOException {

		ThumbUtil.convert("/Coding/img1.jpg", "/Coding/img2.jpg");

		// 把/Coding/img目录及子目录所有的图片压缩至/Coding/img-thumb
		ThumbUtil.batchConvert("/Coding/img", "/Coding/img-thumb");

	}
}
